package com.linkgie.galaxyframework.crypto;

public interface AsymmetricKeyResovler {

	/**
	 * 解析指定的公钥编码数据创建公钥对象；
	 * <p>
	 * 
	 * 如果算法不存在或者不匹配，则抛出异常 {@link CryptoException}；
	 * <p>
	 * 
	 * @param encodedBytes 编码后的公钥字节数据; <br>
	 *                     对应于同一个公钥对象通过方法 {@link PublicKey#getEncoded()} 返回的结果；
	 * @return 公钥；
	 */
	PublicKey resolvePublicKey(byte[] encodedBytes);

	/**
	 * 解析指定的公钥编码数据创建公钥对象；
	 * <p>
	 * 
	 * 如果算法不存在或者不匹配，则抛出异常 {@link CryptoException}；
	 * <p>
	 * 
	 * @param encodedString 编码后的公钥字符; <br>
	 *                      对应于同一个公钥对象通过方法 {@link PublicKey#getEncodedString()}
	 *                      返回的结果；
	 * @return 公钥；
	 */
	PublicKey resolvePublicKey(String encodedString);

	/**
	 * 解析指定的私钥编码数据创建私钥对象；
	 * <p>
	 * 
	 * 如果算法不存在或者不匹配，则抛出异常 {@link CryptoException}；
	 * <p>
	 * 
	 * @param encodedBytes 编码后的私钥字节数据; <br>
	 *                     对应于同一个私钥对象通过方法 {@link PrivateKey#getEncoded()}
	 *                     返回的结果；
	 * @return 私钥；
	 */
	PrivateKey resolvePrivateKey(byte[] encodedBytes);

	/**
	 * 解析指定的私钥编码数据创建私钥对象；
	 * <p>
	 * 
	 * 如果算法不存在或者不匹配，则抛出异常 {@link CryptoException}；
	 * <p>
	 * 
	 * @param encodedString 编码后的私钥字符; <br>
	 *                      对应于同一个私钥对象通过方法 {@link PrivateKey#getEncodedString()}
	 *                      返回的结果；
	 * @return 私钥；
	 */
	PrivateKey resolvePrivateKey(String encodedString);

}